home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / bbs / mfm_111b.zip / SETUP.PAS < prev    next >
Pascal/Delphi Source File  |  1992-01-07  |  8KB  |  259 lines

  1. {========================================================================}
  2. Function OkToAdd(InString : String) : Boolean;
  3.   Var
  4.     Otab : Byte;
  5.   Begin
  6.     If (MaxAvail > SizeOf(ListRecord)) Then
  7.     Begin
  8.       OkToAdd := True;
  9.       For Otab := 1 To 10 Do If Pos(SkipList[Otab],UpperString(InString)) = 1 Then OkToAdd := False;
  10.     End
  11.     Else
  12.     Begin
  13.       OkToAdd := False;
  14.     End;
  15.   End;
  16. {========================================================================}
  17. Function CommentEntry : Boolean;
  18.   Begin
  19.     CommentEntry := False;
  20.     If Length(WorkString) = 0 Then CommentEntry := True;
  21.     If Copy(WorkString,1,1) = ' ' Then CommentEntry := True;
  22.     If Copy(WorkString,1,1) = '-' Then CommentEntry := True;
  23.     If Pos(WorkString[1],Base153) = 0 Then CommentEntry := True;
  24.   End;
  25. {========================================================================}
  26. Procedure FindOrphans;
  27.   Var
  28.     FileFound : Boolean;
  29.     SearchEntry : ListPtr;
  30.   Begin
  31.     FileFound := False; SearchEntry := FirstEntry;
  32.     If FilesBbs Then
  33.     Begin
  34.       While (Not FileFound) And (SearchEntry^.NextEntry <> NIL) Do
  35.       Begin
  36.         If DirInfo.Name = SearchEntry^.FileName Then FileFound := True;
  37.         SearchEntry := SearchEntry^.NextEntry;
  38.       End;
  39.     End;
  40.     If FilesBbs Then
  41.     Begin
  42.       If (Not FileFound) And (DirInfo.Name <> SearchEntry^.FileName) Then
  43.       Begin
  44.         If OkToAdd(DirInfo.Name) Then
  45.         Begin
  46.           New(NewEntry);
  47.           If NumberOfEntries = 0 Then
  48.           Begin
  49.             FirstEntry := NewEntry;
  50.             NewEntry^.PrevEntry := NIL;
  51.             OldEntry := FirstEntry;
  52.           End
  53.           Else
  54.           Begin
  55.             NewEntry^.PrevEntry := OldEntry;
  56.             OldEntry^.NextEntry := NewEntry;
  57.             OldEntry := NewEntry;
  58.           End;
  59.           NewEntry^.TypeOfRecord := Orphan;
  60.           NewEntry^.FileName := DirInfo.Name;
  61.           NewEntry^.FileSize := DirInfo.Size;
  62.           If DirInfo.Name <> 'FILES.BBS' Then
  63.           Begin
  64.             SizeOfFiles := SizeOfFiles + DirInfo.Size;
  65.             Inc(NumberOfFiles);
  66.           End;
  67.           NewEntry^.FileDate := DirInfo.Time;
  68.           NewEntry^.Description := '';
  69.           NewEntry^.Tagged := False;
  70.           Inc(NumberOfEntries);
  71.         End;
  72.       End;
  73.     End
  74.     Else
  75.     Begin
  76.       If Not FileFound Then
  77.       Begin
  78.         If MaxAvail > SizeOf(ListRecord) Then
  79.         Begin
  80.           New(NewEntry);
  81.           NewEntry^.Tagged := False;
  82.           If NumberOfEntries = 0 Then
  83.           Begin
  84.             FirstEntry := NewEntry;
  85.             NewEntry^.PrevEntry := NIL;
  86.             OldEntry := FirstEntry;
  87.           End
  88.           Else
  89.           Begin
  90.             NewEntry^.PrevEntry := OldEntry;
  91.             OldEntry^.NextEntry := NewEntry;
  92.             OldEntry := NewEntry;
  93.           End;
  94.           NewEntry^.TypeOfRecord := Orphan;
  95.           NewEntry^.FileName := DirInfo.Name;
  96.           NewEntry^.FileSize := DirInfo.Size;
  97.           If DirInfo.Name <> 'FILES.BBS' Then
  98.           Begin
  99.             SizeOfFiles := SizeOfFiles + DirInfo.Size;
  100.             Inc(NumberOfFiles);
  101.           End;
  102.           NewEntry^.FileDate := DirInfo.Time;
  103.           NewEntry^.Description := '';
  104.           Inc(NumberOfEntries);
  105.         End;
  106.       End;
  107.     End;
  108.   End;
  109. {========================================================================}
  110. Procedure BuildList;
  111.   Begin
  112.     NumberOfEntries := 0; FilesBbs := True; Altered := False;
  113.     SizeOfFiles := 0; NumberOfFiles := 0;
  114.     Assign(FileList,FileAreaPath+'FILES.BBS');
  115.     FileMode := 64;
  116.     {$I-} Reset(FileList); {$I+}
  117.     If IOresult = 0 Then
  118.     Begin
  119.       AnsiGotoXY(25,1); NewTextColor(White); NewTextBackground(Black);
  120.       AnsiClearToEOL; Write('Loading FILES.BBS ...');
  121.       While Not Eof(FileList) Do
  122.       Begin
  123.         ReadLn(FileList,WorkString);
  124.         If OkToAdd(WorkString) Then
  125.         Begin
  126.           Inc(NumberOfEntries);
  127.           If CommentEntry Then
  128.           Begin
  129.             New(NewEntry);
  130.             NewEntry^.TypeOfRecord := Comment;
  131.             NewEntry^.FileName := '';
  132.             NewEntry^.FileSize := 0;
  133.             NewEntry^.FileDate := 0;
  134.             NewEntry^.Description := WorkString;
  135.             NewEntry^.Tagged := False;
  136.             If NumberOfEntries = 1 Then
  137.             Begin
  138.               FirstEntry := NewEntry;
  139.               NewEntry^.PrevEntry := NIL;
  140.               OldEntry := FirstEntry;
  141.             End
  142.             Else
  143.             Begin
  144.               NewEntry^.PrevEntry := OldEntry;
  145.               OldEntry^.NextEntry := NewEntry;
  146.               OldEntry := NewEntry;
  147.             End;
  148.           End
  149.           Else
  150.           Begin
  151.             New(NewEntry);
  152.             NewEntry^.Tagged := False;
  153.             If NumberOfEntries = 1 Then
  154.             Begin
  155.               FirstEntry := NewEntry;
  156.               NewEntry^.PrevEntry := NIL;
  157.               OldEntry := FirstEntry;
  158.             End
  159.             Else
  160.             Begin
  161.               NewEntry^.PrevEntry := OldEntry;
  162.               OldEntry^.NextEntry := NewEntry;
  163.               OldEntry := NewEntry;
  164.             End;
  165.             If Pos(' ',WorkString) = 0 Then
  166.             Begin
  167.               NewEntry^.FileName := UpperString(WorkString);
  168.             End
  169.             Else
  170.             Begin
  171.               NewEntry^.FileName := UpperString(Copy(Copy(WorkString,1,Pos(' ',WorkString)-1),1,12));
  172.             End;
  173.             FindFirst(FileAreaPath+NewEntry^.FileName,AnyFile,DirInfo);
  174.             If DosError = 0 Then
  175.             Begin
  176.               NewEntry^.TypeOfRecord := FileRecord;
  177.               NewEntry^.FileSize := DirInfo.Size;
  178.               SizeOfFiles := SizeOfFiles + DirInfo.Size;
  179.               Inc(NumberOfFiles);
  180.               NewEntry^.FileDate := DirInfo.Time;
  181.               If Pos(' ',WorkString) = 0 Then
  182.               Begin
  183.                 NewEntry^.Description := '';
  184.               End
  185.               Else
  186.               Begin
  187.                 NewEntry^.Description := LtrimRtrim(Copy(WorkString,Pos(' ',WorkString)+1,144));
  188.               End;
  189.             End
  190.             Else
  191.             Begin
  192.               NewEntry^.TypeOfRecord := Offline;
  193.               NewEntry^.FileSize := 0;
  194.               NewEntry^.FileDate := 0;
  195.               If Pos(' ',WorkString) = 0 Then
  196.               Begin
  197.                 NewEntry^.Description := '';
  198.               End
  199.               Else
  200.               Begin
  201.                 NewEntry^.Description := LtrimRtrim(Copy(WorkString,Pos(' ',WorkString)+1,144));
  202.               End;
  203.             End;
  204.           End;
  205.         End;
  206.       End;
  207.       Close(FileList);
  208.       NewEntry^.NextEntry := NIL;
  209.       If NumberOfEntries = 0 Then FilesBbs := False;
  210.     End
  211.     Else
  212.     Begin
  213.       FilesBbs := False;
  214.     End;
  215.     FindFirst(FileAreaPath+'*.*',Archive,DirInfo);
  216.     If DosError = 0 Then FindOrphans;
  217.     While DosError = 0 Do
  218.     Begin
  219.       NewEntry^.NextEntry := NIL;
  220.       FindNext(DirInfo);
  221.       If DosError = 0 Then FindOrphans;
  222.     End;
  223.     LastEntry := NewEntry;
  224.     LastEntry^.NextEntry := NIL;
  225.     StackEntry := NIL; KillEntry := NIL;
  226.     AnsiGotoXY(25,1); AnsiClearToEOL;
  227.   End;
  228. {========================================================================}
  229. Function Bytes(NumberOfBytes : LongInt) : S8;
  230.   Var
  231.     TempString : S8;
  232.   Begin
  233.     If NumberOfBytes < 1024 Then
  234.     Begin
  235.       TempString := MyStr(NumberOfBytes,4)+'K';
  236.     End
  237.     Else
  238.     Begin
  239.       Str(NumberOfBytes/1024:3:1,TempString);
  240.       TempString := TempString+'M';
  241.     End;
  242.     Bytes := TempString;
  243.   End;
  244. {========================================================================}
  245. Procedure SetupScreen;
  246.   Begin
  247.     NewTextColor(White); NewTextBackground(Black);
  248.     AnsiClearScreen; AnsiGotoXY(24,1);
  249.     NewTextColor(Black); NewTextBackground(Cyan);
  250.     Write(Pgmid+'      ^Q=quit ?=help');
  251.     NewTextColor(White); NewTextBackground(Black);
  252.   End;
  253. {========================================================================}
  254. Procedure ReDrawScreen;
  255.   Begin
  256.     SetupScreen; DisplayScreen;
  257.   End;
  258. {========================================================================}
  259.